/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package savet.util.io;

import com.thoughtworks.xstream.XStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.Serializable;
import savet.entidades.AliasXML;
import savet.entidades.Ementa;
import savet.entidades.Empregador;
import savet.entidades.EmpregadorFisico;
import savet.entidades.EmpregadorJuridico;
import savet.entidades.Lote;
import savet.entidades.TipoGenero;
import savet.entidades.Trabalhador;
import savet.entidades.atributos.ASOS;
import savet.entidades.atributos.Atributo;
import savet.entidades.atributos.AtributoData;
import savet.entidades.atributos.CAGED;
import savet.entidades.atributos.Descanso;
import savet.entidades.atributos.Ferias;
import savet.entidades.atributos.Funcao;
import savet.entidades.atributos.Jornada;
import savet.entidades.atributos.LRE;
import savet.entidades.atributos.Legenda;
import savet.entidades.atributos.Periodo;
import savet.entidades.atributos.Rais;
import savet.entidades.atributos.Rescisao;
import savet.entidades.atributos.Salario;

/**
 *
 * @author Adisson Marinho
 */
public class XMLArquivoUtil extends ArquivoUtil {

    @Override
    public Serializable abrirArquivo(File file) throws IOException, ClassNotFoundException {
        Serializable result = null;
        FileInputStream in = new FileInputStream(file);
        XStream stream = getXStreamConfigurado();
        result = (Serializable) stream.fromXML(in);
        return result;
    }

    @Override
    public void salvarArquivo(File file, Serializable object) throws IOException {
        FileOutputStream out = new FileOutputStream(file);
        XStream stream = getXStreamConfigurado();
        stream.toXML((Object) object, out);
        //        JAXB.marshal(object, file);
    }

    private XStream getXStreamConfigurado() {
        //        result = JAXB.unmarshal(file, Lote.class);
        XStream stream = new XStream();
        stream.alias(AliasXML.ASOS_ALIAS, ASOS.class);
        stream.alias(AliasXML.ATRIBUTO_ALIAS, Atributo.class);
        stream.alias(AliasXML.ATRIBUTO_DATA_ALIAS, AtributoData.class);
        stream.alias(AliasXML.CAGED_ALIAS, CAGED.class);
        stream.alias(AliasXML.DESCANSO_ALIAS, Descanso.class);
        stream.alias(AliasXML.EMENTA_ALIAS, Ementa.class);
        stream.alias(AliasXML.EMPREGADOR_ALIAS, Empregador.class);
        stream.alias(AliasXML.EMPREGADOR_FISICO_ALIAS, EmpregadorFisico.class);
        stream.alias(AliasXML.EMPREGADOR_JURIDICO_ALIAS, EmpregadorJuridico.class);
        stream.alias(AliasXML.FERIAS_ALIAS, Ferias.class);
        stream.alias(AliasXML.FUNCAO_ALIAS, Funcao.class);
        stream.alias(AliasXML.JORNADA_ALIAS, Jornada.class);
        stream.alias(AliasXML.LEGENDA_ALIAS, Legenda.class);
        stream.alias(AliasXML.LOTE_ALIAS, Lote.class);
        stream.alias(AliasXML.LRE_ALIAS, LRE.class);
        stream.alias(AliasXML.PERIODO_ALIAS, Periodo.class);
        stream.alias(AliasXML.RAIS_ALIAS, Rais.class);
        stream.alias(AliasXML.RESCISAO_ALIAS, Rescisao.class);
        stream.alias(AliasXML.SALARIO_ALIAS, Salario.class);
        stream.alias(AliasXML.TIPOGENERO_ALIAS, TipoGenero.class);
        stream.alias(AliasXML.TRABALHADOR_ALIAS, Trabalhador.class);
        return stream;
    }
}
